OSDN Git Service

fix for tamarin-central(dab354bc047c)
authormzp <mzpppp@gmail.com>
Sat, 5 Sep 2009 12:36:44 +0000 (21:36 +0900)
committermzp <mzpppp@gmail.com>
Sat, 5 Sep 2009 12:36:44 +0000 (21:36 +0900)
scm/codegen/asm.ml
scm/codegen/codegen.ml

index 3efaad9..e5f1be7 100644 (file)
@@ -333,17 +333,22 @@ module Make(Spec:Spec) = struct
       }
 
   let assemble slots m =
-    let { cpool = cpool;
+    let { cpool         = cpool;
          method_info   = info;
          method_body   = body;
          class_info    = class_info;
          instance_info = instance_info} =
       assemble_method m in
-    let slot_traits =
-      assemble_slot_traits cpool @@
-       List.map (fun ((ns,name),i)->
-                   (`QName(`Namespace (String.concat "." ns),name),i))
+    let cpool,slots' =
+      map_accum_left
+       (fun cpool ((ns,name),i)->
+          let qname =
+            `QName(`Namespace (String.concat "." ns), name) in
+              (Cpool.add qname cpool,(qname,i)))
+       cpool
        slots in
+    let slot_traits =
+      assemble_slot_traits cpool slots' in
     let class_traits =
       let n =
        List.length slots in
@@ -359,8 +364,6 @@ module Make(Spec:Spec) = struct
        instances   = instance_info;
        scripts     = [{
                         Abc.init = List.length info - 1;
-                        script_traits = slot_traits @ class_traits
+                        script_traits =  slot_traits @ class_traits
                       }]}
-
-
 end
index 6b36f66..32d78d4 100644 (file)
@@ -104,7 +104,8 @@ let rec generate_expr expr =
     | `BindVar {value=Binding.Register n } ->
        [`GetLocal n]
     | `BindVar {value=Binding.Slot (Binding.Global,id) } ->
-       [`GetGlobalSlot id]
+       [`GetGlobalScope;
+        `GetSlot id]
     | `BindVar {value=Binding.Slot (Binding.Scope scope,id) } ->
        [`GetScopeObject scope;
         `GetSlot id]