@@ -222,6 +222,24 @@ static InterpretResult run(VM *vm) {
222222 double b = AS_NUMBER (pop (vm ));
223223 double a = AS_NUMBER (pop (vm ));
224224 push (vm , NUMBER_VAL (a + b ));
225+ } else if (IS_NUMBER (peek (vm , 0 )) && IS_STRING (peek (vm , 1 ))) {
226+ // String + Number
227+ Value numVal = pop (vm ); // b
228+ Value strVal = pop (vm ); // a
229+ char buffer [32 ];
230+ snprintf (buffer , sizeof (buffer ), "%.14g" , AS_NUMBER (numVal ));
231+ push (vm , strVal );
232+ push (vm , OBJ_VAL (copyString (buffer , (int )strlen (buffer ))));
233+ concatenate (vm );
234+ } else if (IS_STRING (peek (vm , 0 )) && IS_NUMBER (peek (vm , 1 ))) {
235+ // Number + String
236+ Value strVal = pop (vm ); // b
237+ Value numVal = pop (vm ); // a
238+ char buffer [32 ];
239+ snprintf (buffer , sizeof (buffer ), "%.14g" , AS_NUMBER (numVal ));
240+ push (vm , OBJ_VAL (copyString (buffer , (int )strlen (buffer ))));
241+ push (vm , strVal );
242+ concatenate (vm );
225243 } else {
226244 runtimeError (vm , "Operands must be two numbers or two strings." );
227245 return INTERPRET_RUNTIME_ERROR ;
@@ -410,6 +428,22 @@ static InterpretResult run(VM *vm) {
410428 double b = AS_NUMBER (pop (vm ));
411429 double a = AS_NUMBER (pop (vm ));
412430 push (vm , NUMBER_VAL (a + b ));
431+ } else if (IS_NUMBER (peek (vm , 0 )) && IS_STRING (peek (vm , 1 ))) {
432+ Value numVal = pop (vm );
433+ Value strVal = pop (vm );
434+ char buffer [32 ];
435+ snprintf (buffer , sizeof (buffer ), "%.14g" , AS_NUMBER (numVal ));
436+ push (vm , strVal );
437+ push (vm , OBJ_VAL (copyString (buffer , (int )strlen (buffer ))));
438+ concatenate (vm );
439+ } else if (IS_STRING (peek (vm , 0 )) && IS_NUMBER (peek (vm , 1 ))) {
440+ Value strVal = pop (vm );
441+ Value numVal = pop (vm );
442+ char buffer [32 ];
443+ snprintf (buffer , sizeof (buffer ), "%.14g" , AS_NUMBER (numVal ));
444+ push (vm , OBJ_VAL (copyString (buffer , (int )strlen (buffer ))));
445+ push (vm , strVal );
446+ concatenate (vm );
413447 } else {
414448 runtimeError (vm , "Operands must be two numbers or two strings." );
415449 return INTERPRET_RUNTIME_ERROR ;
0 commit comments