Skip to content

Commit 4630b74

Browse files
committed
---
yaml --- r: 511 b: refs/heads/master c: 7e62aa6 h: refs/heads/master i: 509: 891f918 507: 4106e3d 503: 7aaf295 495: f7e3a19 479: 2c703d7 447: bab51ea 383: 6697800 255: 37303de v: v3
1 parent 4210284 commit 4630b74

File tree

6 files changed

+62
-22
lines changed

6 files changed

+62
-22
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 176899a970b5ccea7aea43bee31c9ee08860ab0f
2+
refs/heads/master: 7e62aa68018c94bcfc3fd6beab90cf7b87f91cbf

trunk/src/boot/fe/cexp.ml

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ type cdir =
310310
| CDIR_mod of (Ast.ident * Ast.mod_item)
311311
| CDIR_auth of auth
312312

313-
type env = { env_bindings: (Ast.ident * pval) list;
313+
type env = { env_bindings: ((Ast.ident * pval) list) ref;
314314
env_prefix: filename list;
315315
env_items: (filename, Ast.mod_items) Hashtbl.t;
316316
env_files: (node_id,filename) Hashtbl.t;
@@ -357,10 +357,11 @@ and eval_cexp (env:env) (exp:cexp) : cdir array =
357357
| CEXP_let {node=cl} ->
358358
let ident = cl.let_ident in
359359
let v = eval_pexp env cl.let_value in
360-
let env = { env with
361-
env_bindings = ((ident,v)::env.env_bindings ) }
362-
in
363-
eval_cexps env cl.let_body
360+
let old_bindings = !(env.env_bindings) in
361+
env.env_bindings := (ident,v)::old_bindings;
362+
let res = eval_cexps env cl.let_body in
363+
env.env_bindings := old_bindings;
364+
res
364365

365366
| CEXP_src_mod {node=s; id=id} ->
366367
let name = s.src_ident in
@@ -381,6 +382,7 @@ and eval_cexp (env:env) (exp:cexp) : cdir array =
381382
ps.pstate_opaque_id
382383
ps.pstate_sess
383384
ps.pstate_get_mod
385+
ps.pstate_get_cenv_tok
384386
ps.pstate_infer_lib_name
385387
env.env_required
386388
env.env_required_syms
@@ -518,7 +520,7 @@ and eval_pexp (env:env) (exp:Pexp.pexp) : pval =
518520

519521
| Pexp.PEXP_lval (Pexp.PLVAL_ident ident) ->
520522
begin
521-
match ltab_search env.env_bindings ident with
523+
match ltab_search !(env.env_bindings) ident with
522524
None -> raise (err (Printf.sprintf "no binding for '%s' found"
523525
ident) env.env_ps)
524526
| Some v -> v
@@ -622,11 +624,6 @@ let parse_crate_file
622624
let oref = ref (Opaque 0) in
623625
let required = Hashtbl.create 4 in
624626
let required_syms = Hashtbl.create 4 in
625-
let ps =
626-
make_parser tref nref oref sess get_mod
627-
infer_lib_name required required_syms fname
628-
in
629-
630627
let files = Hashtbl.create 0 in
631628
let items = Hashtbl.create 4 in
632629
let target_bindings =
@@ -648,11 +645,23 @@ let parse_crate_file
648645
("build_input", PVAL_str fname);
649646
]
650647
in
651-
let initial_bindings =
652-
target_bindings
653-
@ build_bindings
648+
let bindings =
649+
ref (target_bindings
650+
@ build_bindings)
654651
in
655-
let env = { env_bindings = initial_bindings;
652+
let get_cenv_tok ps ident =
653+
match ltab_search (!bindings) ident with
654+
None -> raise (err (Printf.sprintf "no binding for '%s' found"
655+
ident) ps)
656+
| Some (PVAL_bool b) -> LIT_BOOL b
657+
| Some (PVAL_str s) -> LIT_STR s
658+
| Some (PVAL_num n) -> LIT_INT n
659+
in
660+
let ps =
661+
make_parser tref nref oref sess get_mod get_cenv_tok
662+
infer_lib_name required required_syms fname
663+
in
664+
let env = { env_bindings = bindings;
656665
env_prefix = [Filename.dirname fname];
657666
env_items = Hashtbl.create 0;
658667
env_files = files;
@@ -720,8 +729,12 @@ let parse_src_file
720729
let oref = ref (Opaque 0) in
721730
let required = Hashtbl.create 0 in
722731
let required_syms = Hashtbl.create 0 in
732+
let get_cenv_tok ps ident =
733+
raise (err (Printf.sprintf "no binding for '%s' found"
734+
ident) ps)
735+
in
723736
let ps =
724-
make_parser tref nref oref sess get_mod
737+
make_parser tref nref oref sess get_mod get_cenv_tok
725738
infer_lib_name required required_syms fname
726739
in
727740
with_err_handling sess

trunk/src/boot/fe/item.ml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -786,9 +786,17 @@ and parse_mod_item (ps:pstate) : (Ast.ident * Ast.mod_item) =
786786
EQ ->
787787
begin
788788
bump ps;
789-
match peek ps with
790-
LIT_STR s -> (bump ps; s)
791-
| _ -> raise (unexpected ps)
789+
let do_tok t =
790+
bump ps;
791+
match t with
792+
LIT_STR s -> s
793+
| _ -> raise (unexpected ps)
794+
in
795+
match peek ps with
796+
IDENT i ->
797+
do_tok (ps.pstate_get_cenv_tok ps i)
798+
| t ->
799+
do_tok t
792800
end
793801
| _ -> ps.pstate_infer_lib_name ident
794802
in

trunk/src/boot/fe/parser.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ type pstate =
2323
pstate_node_id : node_id ref;
2424
pstate_opaque_id : opaque_id ref;
2525
pstate_get_mod : get_mod_fn;
26+
pstate_get_cenv_tok : pstate -> Ast.ident -> token;
2627
pstate_infer_lib_name : (Ast.ident -> filename);
2728
pstate_required : (node_id, (required_lib * nabi_conv)) Hashtbl.t;
2829
pstate_required_syms : (node_id, string) Hashtbl.t; }
@@ -45,6 +46,7 @@ let make_parser
4546
(oref:opaque_id ref)
4647
(sess:Session.sess)
4748
(get_mod:get_mod_fn)
49+
(get_cenv_tok:pstate -> Ast.ident -> token)
4850
(infer_lib_name:Ast.ident -> filename)
4951
(required:(node_id, (required_lib * nabi_conv)) Hashtbl.t)
5052
(required_syms:(node_id, string) Hashtbl.t)
@@ -68,6 +70,7 @@ let make_parser
6870
pstate_node_id = nref;
6971
pstate_opaque_id = oref;
7072
pstate_get_mod = get_mod;
73+
pstate_get_cenv_tok = get_cenv_tok;
7174
pstate_infer_lib_name = infer_lib_name;
7275
pstate_required = required;
7376
pstate_required_syms = required_syms; }

trunk/src/comp/lib/llvm.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ type LongLong = i64;
66
type Long = i32;
77
type Bool = int;
88

9-
native mod llvm = "libLLVM-2.7.so" {
9+
native mod llvm = llvm_lib {
1010

1111
type ModuleRef;
1212
type ContextRef;

trunk/src/comp/rustc.rc

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,23 @@ mod driver {
1414
}
1515

1616
mod lib {
17-
mod llvm;
17+
alt (target_os) {
18+
case ("win32") {
19+
let (llvm_lib = "llvm-2.8svn.dll") {
20+
mod llvm;
21+
}
22+
}
23+
case ("macos") {
24+
let (llvm_lib = "libllvm-2.8svn.dylib") {
25+
mod llvm;
26+
}
27+
}
28+
else {
29+
let (llvm_lib = "libllvm-2.8svn.so") {
30+
mod llvm;
31+
}
32+
}
33+
}
1834
}
1935

2036
// Local Variables:

0 commit comments

Comments
 (0)