diff options
| author | Jung-uk Kim <jkim@FreeBSD.org> | 2013-05-17 23:13:40 +0000 |
|---|---|---|
| committer | Jung-uk Kim <jkim@FreeBSD.org> | 2013-05-17 23:13:40 +0000 |
| commit | b7f987c19dad2c6d33c64e7f96a9b4deca9e2650 (patch) | |
| tree | 740dae2325e162bb086ea6e7e5d481c4b669e232 /source/compiler/aslpredef.c | |
| parent | b4a951799e313e9ec15d955b72dd3097e4880724 (diff) | |
Notes
Diffstat (limited to 'source/compiler/aslpredef.c')
| -rw-r--r-- | source/compiler/aslpredef.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/source/compiler/aslpredef.c b/source/compiler/aslpredef.c index 3895681eca1c..60b5269587b4 100644 --- a/source/compiler/aslpredef.c +++ b/source/compiler/aslpredef.c @@ -310,7 +310,6 @@ ApCheckPredefinedReturnValue ( break; default: - /* * All other ops are very difficult or impossible to typecheck at * compile time. These include all Localx, Argx, and method @@ -379,6 +378,7 @@ ApCheckForPredefinedObject ( return; default: + break; } @@ -624,33 +624,53 @@ ApCheckObjectType ( case PARSEOP_ONE: case PARSEOP_ONES: case PARSEOP_INTEGER: + ReturnBtype = ACPI_RTYPE_INTEGER; TypeName = "Integer"; break; case PARSEOP_STRING_LITERAL: + ReturnBtype = ACPI_RTYPE_STRING; TypeName = "String"; break; case PARSEOP_BUFFER: + ReturnBtype = ACPI_RTYPE_BUFFER; TypeName = "Buffer"; break; case PARSEOP_PACKAGE: case PARSEOP_VAR_PACKAGE: + ReturnBtype = ACPI_RTYPE_PACKAGE; TypeName = "Package"; break; case PARSEOP_NAMESEG: case PARSEOP_NAMESTRING: + /* + * Ignore any named references within a package object. + * + * For Package objects, references are allowed instead of any of the + * standard data types (Integer/String/Buffer/Package). These + * references are resolved at runtime. NAMESEG and NAMESTRING are + * impossible to typecheck at compile time because the type of + * any named object can be changed at runtime (for example, + * CopyObject will change the type of the target object). + */ + if (PackageIndex != ACPI_NOT_PACKAGE_ELEMENT) + { + return (AE_OK); + } + ReturnBtype = ACPI_RTYPE_REFERENCE; TypeName = "Reference"; break; default: + /* Not one of the supported object types */ TypeName = UtGetOpName (Op->Asl.ParseOpcode); |
