From e98beb03d7f43309eed927bbbdf2faad9359f2fd Mon Sep 17 00:00:00 2001 From: PuqiAR Date: Mon, 9 Feb 2026 14:25:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AE=9A=E4=B9=89=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E6=9C=AA=E6=8F=90=E4=BE=9B=E5=80=BC=E6=97=B6=E5=86=85?= =?UTF-8?q?=E5=AD=98=E6=B3=84=E6=BC=8F=E7=9A=84bug=E3=80=82=E4=BF=AE?= =?UTF-8?q?=E5=A4=8Dlexer=E8=A7=A3=E6=9E=90=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E4=B8=8D=E8=83=BD=E5=A4=9A=E8=A1=8C=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Evaluator/Core/EvalStatement.cpp | 36 +++++++++++++--------------- src/Lexer/lexer.cpp | 2 +- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/Evaluator/Core/EvalStatement.cpp b/src/Evaluator/Core/EvalStatement.cpp index 2d2b763..d266add 100644 --- a/src/Evaluator/Core/EvalStatement.cpp +++ b/src/Evaluator/Core/EvalStatement.cpp @@ -1,4 +1,4 @@ -#include "Ast/Statements/InterfaceDefSt.hpp" +#include #include #include #include @@ -65,6 +65,10 @@ namespace Fig value = std::make_shared(Object::defaultValue(declaredType)); } // else -> Ok } // else -> type is Any (default) + else + { + value = Object::getNullInstance(); + } AccessModifier am = (varDef->isConst ? (varDef->isPublic ? AccessModifier::PublicConst : AccessModifier::Const) : (varDef->isPublic ? AccessModifier::Public : AccessModifier::Normal)); @@ -185,31 +189,23 @@ namespace Fig ObjectPtr itf_val = check_unwrap_stres(eval(exp, ctx)); if (!itf_val->is()) { - throw EvaluatorError( - u8"TypeError", - std::format( - "Cannot bundle type '{}' that is not interface", - prettyType(itf_val).toBasicString() - ), - exp - ); + throw EvaluatorError(u8"TypeError", + std::format("Cannot bundle type '{}' that is not interface", + prettyType(itf_val).toBasicString()), + exp); } const InterfaceType &itfType = itf_val->as(); for (const auto &method : itfType.methods) { if (cache_methods.contains(method.name)) { - throw EvaluatorError( - u8"DuplicateInterfaceMethodError", - std::format( - "Interface `{}` has duplicate method '{}' with '{}.{}'", - itfType.type.toString().toBasicString(), - method.name.toBasicString(), - cache_methods[method.name].toBasicString(), - method.name.toBasicString() - ), - ifd - ); + throw EvaluatorError(u8"DuplicateInterfaceMethodError", + std::format("Interface `{}` has duplicate method '{}' with '{}.{}'", + itfType.type.toString().toBasicString(), + method.name.toBasicString(), + cache_methods[method.name].toBasicString(), + method.name.toBasicString()), + ifd); } cache_methods[method.name] = itfType.type.toString(); bundle_methods.push_back(method); diff --git a/src/Lexer/lexer.cpp b/src/Lexer/lexer.cpp index 0b95eab..9a5f02b 100644 --- a/src/Lexer/lexer.cpp +++ b/src/Lexer/lexer.cpp @@ -162,7 +162,7 @@ namespace Fig while (hasNext()) { UTF8Char c = *it; - if (c == U'"' || c == U'\n') + if (c == U'"') { next(); unterminated = false;