File tree Expand file tree Collapse file tree 1 file changed +31
-30
lines changed
Expand file tree Collapse file tree 1 file changed +31
-30
lines changed Original file line number Diff line number Diff line change 11extern crate alloc;
2- use alloc:: rc:: Rc ;
3- use core:: cell:: RefCell ;
42
53use zenlang:: compiler:: * ;
64use zenlang:: parser:: * ;
@@ -33,34 +31,6 @@ fn expect_to_return(code: String, value: Value) {
3331 assert ! ( vm. ret. equal( & value, & vm) ) ;
3432}
3533
36- fn expect_to_return_obj ( code : String , object : Object ) {
37- let mut tokenizer = Tokenizer :: new ( code) ;
38- let mut parser = Parser :: new ( & mut tokenizer) ;
39- let mut compiler = Compiler :: new ( & mut parser) ;
40- if let Err ( e) = compiler. compile ( ) {
41- assert_eq ! ( e, "" ) ;
42- }
43- let mut vm = VM :: new ( ) ;
44- let module = compiler. get_module ( ) ;
45- println ! ( "{:?}" , module. opcodes) ;
46-
47- let _ = vm. load_module ( & zenlang:: stdlib:: compile_stdlib_module ( ) ) ;
48- let _ = vm. load_module ( module) ;
49-
50- if let Err ( e) = vm. set_entry_function ( "main" ) {
51- assert_eq ! ( e, "" ) ;
52- }
53-
54- vm. run_until_halt ( ) ;
55-
56- println ! ( "vm.ret: {}" , vm. ret) ;
57- assert_eq ! ( vm. error, "" ) ;
58- assert ! (
59- vm. ret
60- . equal( & Value :: Object ( Rc :: new( RefCell :: new( object) ) ) , & vm)
61- ) ;
62- }
63-
6434#[ test]
6535fn vm_test_self_1 ( ) {
6636 expect_to_return (
@@ -115,3 +85,34 @@ fn main {
11585 Value :: Number ( 2.0 ) ,
11686 ) ;
11787}
88+
89+ #[ test]
90+ fn vm_test_self_3 ( ) {
91+ expect_to_return (
92+ r#"
93+ fn f2 {
94+ let self.hi = 3;
95+ }
96+
97+ fn f {
98+ let self.hi = 1;
99+ let obj = {
100+ "test" = f2
101+ };
102+ obj.test();
103+ let self.hi = obj.hi - 1;
104+ }
105+
106+ fn main {
107+ let obj = {
108+ "obj" = {
109+ "test" = f,
110+ }
111+ };
112+ obj.obj.test();
113+ return obj.obj.hi;
114+ } "#
115+ . into ( ) ,
116+ Value :: Number ( 2.0 ) ,
117+ ) ;
118+ }
You can’t perform that action at this time.
0 commit comments