@@ -1013,15 +1013,28 @@ impl Executor {
10131013 let mut methods = self . pop_stack ( ) . get_list ( ) ;
10141014 let mut class = self . pop_stack ( ) . get_list ( ) ;
10151015 let mut object: HashMap < String , Type > = HashMap :: new ( ) ;
1016- let name = class[ 0 ] . get_string ( ) ;
1016+
1017+ let name = if !class. is_empty ( ) {
1018+ class[ 0 ] . get_string ( )
1019+ } else {
1020+ self . log_print ( "Error! the type name is not found." . to_string ( ) ) ;
1021+ self . stack . push ( Type :: Error ( "instance-name" . to_string ( ) ) ) ;
1022+ return ;
1023+ } ;
10171024
10181025 for ( name, element) in & mut class. to_owned ( ) [ 1 ..class. len ( ) ] . iter ( ) . zip ( data) {
10191026 object. insert ( name. to_owned ( ) . get_string ( ) , element) ;
10201027 }
10211028
10221029 for item in & mut methods {
10231030 let item = item. get_list ( ) ;
1024- object. insert ( item[ 0 ] . clone ( ) . get_string ( ) , item[ 1 ] . clone ( ) ) ;
1031+ if item. len ( ) >= 2 {
1032+ object. insert ( item[ 0 ] . clone ( ) . get_string ( ) , item[ 1 ] . clone ( ) ) ;
1033+ } else {
1034+ self . log_print ( "Error! the default data structure is wrong." . to_string ( ) ) ;
1035+ self . stack . push ( Type :: Error ( "instance-default" . to_string ( ) ) ) ;
1036+ return ;
1037+ }
10251038 }
10261039
10271040 self . stack . push ( Type :: Object ( name, object) )
@@ -1072,8 +1085,8 @@ impl Executor {
10721085 . entry ( property)
10731086 . and_modify ( |value| * value = data. clone ( ) )
10741087 . or_insert ( data. clone ( ) ) ;
1075-
1076- self . stack . push ( Type :: Object ( name, value) )
1088+
1089+ self . stack . push ( Type :: Object ( name, value) )
10771090 }
10781091 _ => self . stack . push ( Type :: Error ( "not-object" . to_string ( ) ) ) ,
10791092 }
0 commit comments