diff --git a/dart2dsl/lib/fairdsl/fair_ast_gen.dart b/dart2dsl/lib/fairdsl/fair_ast_gen.dart index f41a9f4c..a7faf11c 100644 --- a/dart2dsl/lib/fairdsl/fair_ast_gen.dart +++ b/dart2dsl/lib/fairdsl/fair_ast_gen.dart @@ -413,6 +413,9 @@ class CustomAstVisitor extends SimpleAstVisitor { @override Map? visitPrefixExpression(PrefixExpression node){ + if(node.operator.type == TokenType.MINUS && (node.operand is DoubleLiteral || node.operand is IntegerLiteral)){ + return _buildNumericLiteral(num.parse(node.operand.toSource()) * -1); + } return _buildPrefixExpression(_visitNode(node.operand), node.operator.toString(), true); } diff --git a/dart2dsl/lib/fairdsl/fair_dsl_gen.dart b/dart2dsl/lib/fairdsl/fair_dsl_gen.dart index ce91dac6..d6044a11 100644 --- a/dart2dsl/lib/fairdsl/fair_dsl_gen.dart +++ b/dart2dsl/lib/fairdsl/fair_dsl_gen.dart @@ -5,6 +5,7 @@ */ import 'dart:convert'; +import 'dart:io'; import 'package:fair_dart2dsl/fairdsl/fair_ast_logic_unit.dart'; @@ -320,6 +321,20 @@ dynamic _buildWidgetDsl( return dslMap; } +bool isDoubleProperty(PrefixedIdentifier? node) { + if (!(node is PrefixedIdentifier) || node.prefix != 'double') { + return false; + } + + switch (node.identifier) { + case 'infinity': + return true; + default: + stdout.writeln('Fair 不支持该 常量 double ${node.identifier}'); + return false; + } +} + dynamic _buildValueExpression( Expression? valueExpression, FairDslContex? fairDslContex) { var naPaValue; @@ -349,7 +364,7 @@ dynamic _buildValueExpression( naPaValue = valueExpression?.asBooleanLiteral.value; } else if (valueExpression?.isPrefixedIdentifier==true) { if (RegExp(r'^[a-z_]') // widget.** 参数类的特殊处理成#(),兼容1期 - .hasMatch(valueExpression?.asPrefixedIdentifier.prefix??'') && ('widget' != valueExpression?.asPrefixedIdentifier.prefix)) { + .hasMatch(valueExpression?.asPrefixedIdentifier.prefix??'') && ('widget' != valueExpression?.asPrefixedIdentifier.prefix) && !isDoubleProperty(valueExpression?.asPrefixedIdentifier)) { naPaValue = '\$(' + (valueExpression?.asPrefixedIdentifier.prefix??'') + '.' +