@@ -1013,15 +1013,28 @@ impl Executor {
1013
1013
let mut methods = self . pop_stack ( ) . get_list ( ) ;
1014
1014
let mut class = self . pop_stack ( ) . get_list ( ) ;
1015
1015
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
+ } ;
1017
1024
1018
1025
for ( name, element) in & mut class. to_owned ( ) [ 1 ..class. len ( ) ] . iter ( ) . zip ( data) {
1019
1026
object. insert ( name. to_owned ( ) . get_string ( ) , element) ;
1020
1027
}
1021
1028
1022
1029
for item in & mut methods {
1023
1030
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
+ }
1025
1038
}
1026
1039
1027
1040
self . stack . push ( Type :: Object ( name, object) )
@@ -1072,8 +1085,8 @@ impl Executor {
1072
1085
. entry ( property)
1073
1086
. and_modify ( |value| * value = data. clone ( ) )
1074
1087
. or_insert ( data. clone ( ) ) ;
1075
-
1076
- self . stack . push ( Type :: Object ( name, value) )
1088
+
1089
+ self . stack . push ( Type :: Object ( name, value) )
1077
1090
}
1078
1091
_ => self . stack . push ( Type :: Error ( "not-object" . to_string ( ) ) ) ,
1079
1092
}
0 commit comments