1*eef1b955SJung-uk Kim 2*eef1b955SJung-uk Kim /****************************************************************************** 3*eef1b955SJung-uk Kim * 4*eef1b955SJung-uk Kim * Module Name: aslsupport.l - Flex/lex scanner C support routines. 5*eef1b955SJung-uk Kim * NOTE: Included into aslcompile.l, not compiled by itself. 6*eef1b955SJung-uk Kim * 7*eef1b955SJung-uk Kim *****************************************************************************/ 8*eef1b955SJung-uk Kim 9*eef1b955SJung-uk Kim /* 10*eef1b955SJung-uk Kim * Copyright (C) 2000 - 2012, Intel Corp. 11*eef1b955SJung-uk Kim * All rights reserved. 12*eef1b955SJung-uk Kim * 13*eef1b955SJung-uk Kim * Redistribution and use in source and binary forms, with or without 14*eef1b955SJung-uk Kim * modification, are permitted provided that the following conditions 15*eef1b955SJung-uk Kim * are met: 16*eef1b955SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 17*eef1b955SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 18*eef1b955SJung-uk Kim * without modification. 19*eef1b955SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 20*eef1b955SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 21*eef1b955SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 22*eef1b955SJung-uk Kim * including a substantially similar Disclaimer requirement for further 23*eef1b955SJung-uk Kim * binary redistribution. 24*eef1b955SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 25*eef1b955SJung-uk Kim * of any contributors may be used to endorse or promote products derived 26*eef1b955SJung-uk Kim * from this software without specific prior written permission. 27*eef1b955SJung-uk Kim * 28*eef1b955SJung-uk Kim * Alternatively, this software may be distributed under the terms of the 29*eef1b955SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 30*eef1b955SJung-uk Kim * Software Foundation. 31*eef1b955SJung-uk Kim * 32*eef1b955SJung-uk Kim * NO WARRANTY 33*eef1b955SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 34*eef1b955SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 35*eef1b955SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 36*eef1b955SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 37*eef1b955SJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 38*eef1b955SJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 39*eef1b955SJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 40*eef1b955SJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 41*eef1b955SJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 42*eef1b955SJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 43*eef1b955SJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 44*eef1b955SJung-uk Kim */ 45*eef1b955SJung-uk Kim 46*eef1b955SJung-uk Kim 47*eef1b955SJung-uk Kim /* Configuration */ 48*eef1b955SJung-uk Kim 49*eef1b955SJung-uk Kim #define ASL_SPACES_PER_TAB 4 50*eef1b955SJung-uk Kim 51*eef1b955SJung-uk Kim #define ASL_NORMAL_CHAR 0 52*eef1b955SJung-uk Kim #define ASL_ESCAPE_SEQUENCE 1 53*eef1b955SJung-uk Kim #define ASL_OCTAL_CONSTANT 2 54*eef1b955SJung-uk Kim #define ASL_HEX_CONSTANT 3 55*eef1b955SJung-uk Kim 56*eef1b955SJung-uk Kim 57*eef1b955SJung-uk Kim /* File node - used for "Include" operator file stack */ 58*eef1b955SJung-uk Kim 59*eef1b955SJung-uk Kim typedef struct asl_file_node 60*eef1b955SJung-uk Kim { 61*eef1b955SJung-uk Kim FILE *File; 62*eef1b955SJung-uk Kim UINT32 CurrentLineNumber; 63*eef1b955SJung-uk Kim YY_BUFFER_STATE State; 64*eef1b955SJung-uk Kim char *Filename; 65*eef1b955SJung-uk Kim struct asl_file_node *Next; 66*eef1b955SJung-uk Kim 67*eef1b955SJung-uk Kim } ASL_FILE_NODE; 68*eef1b955SJung-uk Kim 69*eef1b955SJung-uk Kim /* File stack for the "Include" operator (NOT #include operator) */ 70*eef1b955SJung-uk Kim 71*eef1b955SJung-uk Kim ASL_FILE_NODE *Gbl_IncludeFileStack = NULL; 72*eef1b955SJung-uk Kim 73*eef1b955SJung-uk Kim 74*eef1b955SJung-uk Kim /******************************************************************************* 75*eef1b955SJung-uk Kim * 76*eef1b955SJung-uk Kim * FUNCTION: AslDoLineDirective 77*eef1b955SJung-uk Kim * 78*eef1b955SJung-uk Kim * PARAMETERS: None. Uses input() to access current source code line 79*eef1b955SJung-uk Kim * 80*eef1b955SJung-uk Kim * RETURN: Updates global line number and filename 81*eef1b955SJung-uk Kim * 82*eef1b955SJung-uk Kim * DESCRIPTION: Handle #line directives emitted by the preprocessor. 83*eef1b955SJung-uk Kim * 84*eef1b955SJung-uk Kim * The #line directive is emitted by the preprocesser, and is used to 85*eef1b955SJung-uk Kim * pass through line numbers from the original source code file to the 86*eef1b955SJung-uk Kim * preprocessor output file (.i). This allows any compiler-generated 87*eef1b955SJung-uk Kim * error messages to be displayed with the correct line number. 88*eef1b955SJung-uk Kim * 89*eef1b955SJung-uk Kim ******************************************************************************/ 90*eef1b955SJung-uk Kim 91*eef1b955SJung-uk Kim static void 92*eef1b955SJung-uk Kim AslDoLineDirective ( 93*eef1b955SJung-uk Kim void) 94*eef1b955SJung-uk Kim { 95*eef1b955SJung-uk Kim char c; 96*eef1b955SJung-uk Kim char *Token; 97*eef1b955SJung-uk Kim UINT32 LineNumber; 98*eef1b955SJung-uk Kim char *Filename; 99*eef1b955SJung-uk Kim 100*eef1b955SJung-uk Kim 101*eef1b955SJung-uk Kim /* Eat the entire line that contains the #line directive */ 102*eef1b955SJung-uk Kim 103*eef1b955SJung-uk Kim while ((c = (char) input()) != '\n' && c != EOF) 104*eef1b955SJung-uk Kim { 105*eef1b955SJung-uk Kim AslInsertLineBuffer (c); 106*eef1b955SJung-uk Kim } 107*eef1b955SJung-uk Kim AslInsertLineBuffer (0); 108*eef1b955SJung-uk Kim 109*eef1b955SJung-uk Kim /* First argument is the actual line number */ 110*eef1b955SJung-uk Kim 111*eef1b955SJung-uk Kim Token = strtok (Gbl_CurrentLineBuffer, " "); 112*eef1b955SJung-uk Kim if (!Token) 113*eef1b955SJung-uk Kim { 114*eef1b955SJung-uk Kim goto ResetAndExit; 115*eef1b955SJung-uk Kim } 116*eef1b955SJung-uk Kim 117*eef1b955SJung-uk Kim /* Convert line number. Subtract one to handle _this_ line */ 118*eef1b955SJung-uk Kim 119*eef1b955SJung-uk Kim LineNumber = (UINT32) UtDoConstant (Token); 120*eef1b955SJung-uk Kim FlSetLineNumber (LineNumber - 1); 121*eef1b955SJung-uk Kim 122*eef1b955SJung-uk Kim /* Second argument is the optional filename (in double quotes) */ 123*eef1b955SJung-uk Kim 124*eef1b955SJung-uk Kim Token = strtok (NULL, " \""); 125*eef1b955SJung-uk Kim if (Token) 126*eef1b955SJung-uk Kim { 127*eef1b955SJung-uk Kim Filename = ACPI_ALLOCATE_ZEROED (strlen (Token) + 1); 128*eef1b955SJung-uk Kim strcpy (Filename, Token); 129*eef1b955SJung-uk Kim FlSetFilename (Filename); 130*eef1b955SJung-uk Kim } 131*eef1b955SJung-uk Kim 132*eef1b955SJung-uk Kim /* Third argument is not supported at this time */ 133*eef1b955SJung-uk Kim 134*eef1b955SJung-uk Kim ResetAndExit: 135*eef1b955SJung-uk Kim AslResetCurrentLineBuffer (); 136*eef1b955SJung-uk Kim } 137*eef1b955SJung-uk Kim 138*eef1b955SJung-uk Kim 139*eef1b955SJung-uk Kim /******************************************************************************* 140*eef1b955SJung-uk Kim * 141*eef1b955SJung-uk Kim * FUNCTION: AslPopInputFileStack 142*eef1b955SJung-uk Kim * 143*eef1b955SJung-uk Kim * PARAMETERS: None 144*eef1b955SJung-uk Kim * 145*eef1b955SJung-uk Kim * RETURN: 0 if a node was popped, -1 otherwise 146*eef1b955SJung-uk Kim * 147*eef1b955SJung-uk Kim * DESCRIPTION: Pop the top of the input file stack and point the parser to 148*eef1b955SJung-uk Kim * the saved parse buffer contained in the fnode. Also, set the 149*eef1b955SJung-uk Kim * global line counters to the saved values. This function is 150*eef1b955SJung-uk Kim * called when an include file reaches EOF. 151*eef1b955SJung-uk Kim * 152*eef1b955SJung-uk Kim ******************************************************************************/ 153*eef1b955SJung-uk Kim 154*eef1b955SJung-uk Kim int 155*eef1b955SJung-uk Kim AslPopInputFileStack ( 156*eef1b955SJung-uk Kim void) 157*eef1b955SJung-uk Kim { 158*eef1b955SJung-uk Kim ASL_FILE_NODE *Fnode; 159*eef1b955SJung-uk Kim 160*eef1b955SJung-uk Kim 161*eef1b955SJung-uk Kim Fnode = Gbl_IncludeFileStack; 162*eef1b955SJung-uk Kim DbgPrint (ASL_PARSE_OUTPUT, "\nPop InputFile Stack, Fnode %p\n\n", Fnode); 163*eef1b955SJung-uk Kim 164*eef1b955SJung-uk Kim if (!Fnode) 165*eef1b955SJung-uk Kim { 166*eef1b955SJung-uk Kim return (-1); 167*eef1b955SJung-uk Kim } 168*eef1b955SJung-uk Kim 169*eef1b955SJung-uk Kim /* Close the current include file */ 170*eef1b955SJung-uk Kim 171*eef1b955SJung-uk Kim fclose (yyin); 172*eef1b955SJung-uk Kim 173*eef1b955SJung-uk Kim /* Update the top-of-stack */ 174*eef1b955SJung-uk Kim 175*eef1b955SJung-uk Kim Gbl_IncludeFileStack = Fnode->Next; 176*eef1b955SJung-uk Kim 177*eef1b955SJung-uk Kim /* Reset global line counter and filename */ 178*eef1b955SJung-uk Kim 179*eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename = Fnode->Filename; 180*eef1b955SJung-uk Kim Gbl_CurrentLineNumber = Fnode->CurrentLineNumber; 181*eef1b955SJung-uk Kim 182*eef1b955SJung-uk Kim /* Point the parser to the popped file */ 183*eef1b955SJung-uk Kim 184*eef1b955SJung-uk Kim yy_delete_buffer (YY_CURRENT_BUFFER); 185*eef1b955SJung-uk Kim yy_switch_to_buffer (Fnode->State); 186*eef1b955SJung-uk Kim 187*eef1b955SJung-uk Kim /* All done with this node */ 188*eef1b955SJung-uk Kim 189*eef1b955SJung-uk Kim ACPI_FREE (Fnode); 190*eef1b955SJung-uk Kim return (0); 191*eef1b955SJung-uk Kim } 192*eef1b955SJung-uk Kim 193*eef1b955SJung-uk Kim 194*eef1b955SJung-uk Kim /******************************************************************************* 195*eef1b955SJung-uk Kim * 196*eef1b955SJung-uk Kim * FUNCTION: AslPushInputFileStack 197*eef1b955SJung-uk Kim * 198*eef1b955SJung-uk Kim * PARAMETERS: InputFile - Open file pointer 199*eef1b955SJung-uk Kim * Filename - Name of the file 200*eef1b955SJung-uk Kim * 201*eef1b955SJung-uk Kim * RETURN: None 202*eef1b955SJung-uk Kim * 203*eef1b955SJung-uk Kim * DESCRIPTION: Push the InputFile onto the file stack, and point the parser 204*eef1b955SJung-uk Kim * to this file. Called when an include file is successfully 205*eef1b955SJung-uk Kim * opened. 206*eef1b955SJung-uk Kim * 207*eef1b955SJung-uk Kim ******************************************************************************/ 208*eef1b955SJung-uk Kim 209*eef1b955SJung-uk Kim void 210*eef1b955SJung-uk Kim AslPushInputFileStack ( 211*eef1b955SJung-uk Kim FILE *InputFile, 212*eef1b955SJung-uk Kim char *Filename) 213*eef1b955SJung-uk Kim { 214*eef1b955SJung-uk Kim ASL_FILE_NODE *Fnode; 215*eef1b955SJung-uk Kim YY_BUFFER_STATE State; 216*eef1b955SJung-uk Kim 217*eef1b955SJung-uk Kim 218*eef1b955SJung-uk Kim /* Save the current state in an Fnode */ 219*eef1b955SJung-uk Kim 220*eef1b955SJung-uk Kim Fnode = UtLocalCalloc (sizeof (ASL_FILE_NODE)); 221*eef1b955SJung-uk Kim 222*eef1b955SJung-uk Kim Fnode->File = yyin; 223*eef1b955SJung-uk Kim Fnode->Next = Gbl_IncludeFileStack; 224*eef1b955SJung-uk Kim Fnode->State = YY_CURRENT_BUFFER; 225*eef1b955SJung-uk Kim Fnode->CurrentLineNumber = Gbl_CurrentLineNumber; 226*eef1b955SJung-uk Kim Fnode->Filename = Gbl_Files[ASL_FILE_INPUT].Filename; 227*eef1b955SJung-uk Kim 228*eef1b955SJung-uk Kim /* Push it on the stack */ 229*eef1b955SJung-uk Kim 230*eef1b955SJung-uk Kim Gbl_IncludeFileStack = Fnode; 231*eef1b955SJung-uk Kim 232*eef1b955SJung-uk Kim /* Point the parser to this file */ 233*eef1b955SJung-uk Kim 234*eef1b955SJung-uk Kim State = yy_create_buffer (InputFile, YY_BUF_SIZE); 235*eef1b955SJung-uk Kim yy_switch_to_buffer (State); 236*eef1b955SJung-uk Kim 237*eef1b955SJung-uk Kim DbgPrint (ASL_PARSE_OUTPUT, "\nPush InputFile Stack, returning %p\n\n", InputFile); 238*eef1b955SJung-uk Kim 239*eef1b955SJung-uk Kim /* Reset the global line count and filename */ 240*eef1b955SJung-uk Kim 241*eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename = Filename; 242*eef1b955SJung-uk Kim Gbl_CurrentLineNumber = 1; 243*eef1b955SJung-uk Kim yyin = InputFile; 244*eef1b955SJung-uk Kim } 245*eef1b955SJung-uk Kim 246*eef1b955SJung-uk Kim 247*eef1b955SJung-uk Kim /******************************************************************************* 248*eef1b955SJung-uk Kim * 249*eef1b955SJung-uk Kim * FUNCTION: AslResetCurrentLineBuffer 250*eef1b955SJung-uk Kim * 251*eef1b955SJung-uk Kim * PARAMETERS: None 252*eef1b955SJung-uk Kim * 253*eef1b955SJung-uk Kim * RETURN: None 254*eef1b955SJung-uk Kim * 255*eef1b955SJung-uk Kim * DESCRIPTION: Reset the Line Buffer to zero, increment global line numbers. 256*eef1b955SJung-uk Kim * 257*eef1b955SJung-uk Kim ******************************************************************************/ 258*eef1b955SJung-uk Kim 259*eef1b955SJung-uk Kim void 260*eef1b955SJung-uk Kim AslResetCurrentLineBuffer ( 261*eef1b955SJung-uk Kim void) 262*eef1b955SJung-uk Kim { 263*eef1b955SJung-uk Kim 264*eef1b955SJung-uk Kim if (Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle) 265*eef1b955SJung-uk Kim { 266*eef1b955SJung-uk Kim FlWriteFile (ASL_FILE_SOURCE_OUTPUT, Gbl_CurrentLineBuffer, 267*eef1b955SJung-uk Kim Gbl_LineBufPtr - Gbl_CurrentLineBuffer); 268*eef1b955SJung-uk Kim } 269*eef1b955SJung-uk Kim 270*eef1b955SJung-uk Kim Gbl_CurrentLineOffset += Gbl_CurrentColumn; 271*eef1b955SJung-uk Kim Gbl_CurrentColumn = 0; 272*eef1b955SJung-uk Kim 273*eef1b955SJung-uk Kim Gbl_CurrentLineNumber++; 274*eef1b955SJung-uk Kim Gbl_LogicalLineNumber++; 275*eef1b955SJung-uk Kim Gbl_LineBufPtr = Gbl_CurrentLineBuffer; 276*eef1b955SJung-uk Kim } 277*eef1b955SJung-uk Kim 278*eef1b955SJung-uk Kim 279*eef1b955SJung-uk Kim /******************************************************************************* 280*eef1b955SJung-uk Kim * 281*eef1b955SJung-uk Kim * FUNCTION: AslInsertLineBuffer 282*eef1b955SJung-uk Kim * 283*eef1b955SJung-uk Kim * PARAMETERS: SourceChar - One char from the input ASL source file 284*eef1b955SJung-uk Kim * 285*eef1b955SJung-uk Kim * RETURN: None 286*eef1b955SJung-uk Kim * 287*eef1b955SJung-uk Kim * DESCRIPTION: Put one character of the source file into the temp line buffer 288*eef1b955SJung-uk Kim * 289*eef1b955SJung-uk Kim ******************************************************************************/ 290*eef1b955SJung-uk Kim 291*eef1b955SJung-uk Kim void 292*eef1b955SJung-uk Kim AslInsertLineBuffer ( 293*eef1b955SJung-uk Kim int SourceChar) 294*eef1b955SJung-uk Kim { 295*eef1b955SJung-uk Kim UINT32 i; 296*eef1b955SJung-uk Kim UINT32 Count = 1; 297*eef1b955SJung-uk Kim 298*eef1b955SJung-uk Kim 299*eef1b955SJung-uk Kim if (SourceChar == EOF) 300*eef1b955SJung-uk Kim { 301*eef1b955SJung-uk Kim return; 302*eef1b955SJung-uk Kim } 303*eef1b955SJung-uk Kim 304*eef1b955SJung-uk Kim Gbl_InputByteCount++; 305*eef1b955SJung-uk Kim 306*eef1b955SJung-uk Kim /* Handle tabs. Convert to spaces */ 307*eef1b955SJung-uk Kim 308*eef1b955SJung-uk Kim if (SourceChar == '\t') 309*eef1b955SJung-uk Kim { 310*eef1b955SJung-uk Kim SourceChar = ' '; 311*eef1b955SJung-uk Kim Count = ASL_SPACES_PER_TAB - 312*eef1b955SJung-uk Kim (Gbl_CurrentColumn & (ASL_SPACES_PER_TAB-1)); 313*eef1b955SJung-uk Kim } 314*eef1b955SJung-uk Kim 315*eef1b955SJung-uk Kim for (i = 0; i < Count; i++) 316*eef1b955SJung-uk Kim { 317*eef1b955SJung-uk Kim Gbl_CurrentColumn++; 318*eef1b955SJung-uk Kim 319*eef1b955SJung-uk Kim /* Insert the character into the line buffer */ 320*eef1b955SJung-uk Kim 321*eef1b955SJung-uk Kim *Gbl_LineBufPtr = (UINT8) SourceChar; 322*eef1b955SJung-uk Kim Gbl_LineBufPtr++; 323*eef1b955SJung-uk Kim 324*eef1b955SJung-uk Kim if (Gbl_LineBufPtr > (Gbl_CurrentLineBuffer + (ASL_LINE_BUFFER_SIZE - 1))) 325*eef1b955SJung-uk Kim { 326*eef1b955SJung-uk Kim #if 0 327*eef1b955SJung-uk Kim /* 328*eef1b955SJung-uk Kim * Warning if we have split a long source line. 329*eef1b955SJung-uk Kim * <Probably overkill> 330*eef1b955SJung-uk Kim */ 331*eef1b955SJung-uk Kim sprintf (MsgBuffer, "Max %u", ASL_LINE_BUFFER_SIZE); 332*eef1b955SJung-uk Kim AslCommonError (ASL_WARNING, ASL_MSG_LONG_LINE, 333*eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 334*eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 335*eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, MsgBuffer); 336*eef1b955SJung-uk Kim #endif 337*eef1b955SJung-uk Kim 338*eef1b955SJung-uk Kim AslResetCurrentLineBuffer (); 339*eef1b955SJung-uk Kim } 340*eef1b955SJung-uk Kim else if (SourceChar == '\n') 341*eef1b955SJung-uk Kim { 342*eef1b955SJung-uk Kim /* End of line */ 343*eef1b955SJung-uk Kim 344*eef1b955SJung-uk Kim AslResetCurrentLineBuffer (); 345*eef1b955SJung-uk Kim } 346*eef1b955SJung-uk Kim } 347*eef1b955SJung-uk Kim } 348*eef1b955SJung-uk Kim 349*eef1b955SJung-uk Kim 350*eef1b955SJung-uk Kim /******************************************************************************* 351*eef1b955SJung-uk Kim * 352*eef1b955SJung-uk Kim * FUNCTION: count 353*eef1b955SJung-uk Kim * 354*eef1b955SJung-uk Kim * PARAMETERS: yytext - Contains the matched keyword. 355*eef1b955SJung-uk Kim * Type - Keyword/Character type: 356*eef1b955SJung-uk Kim * 0 = anything except a keyword 357*eef1b955SJung-uk Kim * 1 = pseudo-keywords 358*eef1b955SJung-uk Kim * 2 = non-executable ASL keywords 359*eef1b955SJung-uk Kim * 3 = executable ASL keywords 360*eef1b955SJung-uk Kim * 361*eef1b955SJung-uk Kim * RETURN: None 362*eef1b955SJung-uk Kim * 363*eef1b955SJung-uk Kim * DESCRIPTION: Count keywords and put them into the line buffer 364*eef1b955SJung-uk Kim * 365*eef1b955SJung-uk Kim ******************************************************************************/ 366*eef1b955SJung-uk Kim 367*eef1b955SJung-uk Kim static void 368*eef1b955SJung-uk Kim count ( 369*eef1b955SJung-uk Kim int Type) 370*eef1b955SJung-uk Kim { 371*eef1b955SJung-uk Kim int i; 372*eef1b955SJung-uk Kim 373*eef1b955SJung-uk Kim 374*eef1b955SJung-uk Kim switch (Type) 375*eef1b955SJung-uk Kim { 376*eef1b955SJung-uk Kim case 2: 377*eef1b955SJung-uk Kim TotalKeywords++; 378*eef1b955SJung-uk Kim TotalNamedObjects++; 379*eef1b955SJung-uk Kim break; 380*eef1b955SJung-uk Kim 381*eef1b955SJung-uk Kim case 3: 382*eef1b955SJung-uk Kim TotalKeywords++; 383*eef1b955SJung-uk Kim TotalExecutableOpcodes++; 384*eef1b955SJung-uk Kim break; 385*eef1b955SJung-uk Kim } 386*eef1b955SJung-uk Kim 387*eef1b955SJung-uk Kim for (i = 0; (yytext[i] != 0) && (yytext[i] != EOF); i++) 388*eef1b955SJung-uk Kim { 389*eef1b955SJung-uk Kim AslInsertLineBuffer (yytext[i]); 390*eef1b955SJung-uk Kim *Gbl_LineBufPtr = 0; 391*eef1b955SJung-uk Kim } 392*eef1b955SJung-uk Kim } 393*eef1b955SJung-uk Kim 394*eef1b955SJung-uk Kim 395*eef1b955SJung-uk Kim /******************************************************************************* 396*eef1b955SJung-uk Kim * 397*eef1b955SJung-uk Kim * FUNCTION: AslDoComment 398*eef1b955SJung-uk Kim * 399*eef1b955SJung-uk Kim * PARAMETERS: none 400*eef1b955SJung-uk Kim * 401*eef1b955SJung-uk Kim * RETURN: none 402*eef1b955SJung-uk Kim * 403*eef1b955SJung-uk Kim * DESCRIPTION: Process a standard comment. 404*eef1b955SJung-uk Kim * 405*eef1b955SJung-uk Kim ******************************************************************************/ 406*eef1b955SJung-uk Kim 407*eef1b955SJung-uk Kim static char 408*eef1b955SJung-uk Kim AslDoComment ( 409*eef1b955SJung-uk Kim void) 410*eef1b955SJung-uk Kim { 411*eef1b955SJung-uk Kim char c; 412*eef1b955SJung-uk Kim char c1 = 0; 413*eef1b955SJung-uk Kim 414*eef1b955SJung-uk Kim 415*eef1b955SJung-uk Kim AslInsertLineBuffer ('/'); 416*eef1b955SJung-uk Kim AslInsertLineBuffer ('*'); 417*eef1b955SJung-uk Kim 418*eef1b955SJung-uk Kim loop: 419*eef1b955SJung-uk Kim 420*eef1b955SJung-uk Kim /* Eat chars until end-of-comment */ 421*eef1b955SJung-uk Kim 422*eef1b955SJung-uk Kim while ((c = (char) input()) != '*' && c != EOF) 423*eef1b955SJung-uk Kim { 424*eef1b955SJung-uk Kim AslInsertLineBuffer (c); 425*eef1b955SJung-uk Kim c1 = c; 426*eef1b955SJung-uk Kim } 427*eef1b955SJung-uk Kim 428*eef1b955SJung-uk Kim if (c == EOF) 429*eef1b955SJung-uk Kim { 430*eef1b955SJung-uk Kim goto EarlyEOF; 431*eef1b955SJung-uk Kim } 432*eef1b955SJung-uk Kim 433*eef1b955SJung-uk Kim /* 434*eef1b955SJung-uk Kim * Check for nested comment -- can help catch cases where a previous 435*eef1b955SJung-uk Kim * comment was accidently left unterminated 436*eef1b955SJung-uk Kim */ 437*eef1b955SJung-uk Kim if ((c1 == '/') && (c == '*')) 438*eef1b955SJung-uk Kim { 439*eef1b955SJung-uk Kim AslCommonError (ASL_WARNING, ASL_MSG_NESTED_COMMENT, 440*eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 441*eef1b955SJung-uk Kim Gbl_InputByteCount, Gbl_CurrentColumn, 442*eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 443*eef1b955SJung-uk Kim } 444*eef1b955SJung-uk Kim 445*eef1b955SJung-uk Kim /* Comment is closed only if the NEXT character is a slash */ 446*eef1b955SJung-uk Kim 447*eef1b955SJung-uk Kim AslInsertLineBuffer (c); 448*eef1b955SJung-uk Kim 449*eef1b955SJung-uk Kim if ((c1 = (char) input()) != '/' && c1 != EOF) 450*eef1b955SJung-uk Kim { 451*eef1b955SJung-uk Kim unput(c1); 452*eef1b955SJung-uk Kim goto loop; 453*eef1b955SJung-uk Kim } 454*eef1b955SJung-uk Kim 455*eef1b955SJung-uk Kim if (c1 == EOF) 456*eef1b955SJung-uk Kim { 457*eef1b955SJung-uk Kim goto EarlyEOF; 458*eef1b955SJung-uk Kim } 459*eef1b955SJung-uk Kim 460*eef1b955SJung-uk Kim AslInsertLineBuffer (c1); 461*eef1b955SJung-uk Kim return (TRUE); 462*eef1b955SJung-uk Kim 463*eef1b955SJung-uk Kim 464*eef1b955SJung-uk Kim EarlyEOF: 465*eef1b955SJung-uk Kim /* 466*eef1b955SJung-uk Kim * Premature End-Of-File 467*eef1b955SJung-uk Kim */ 468*eef1b955SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_EARLY_EOF, 469*eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 470*eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 471*eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 472*eef1b955SJung-uk Kim return (FALSE); 473*eef1b955SJung-uk Kim } 474*eef1b955SJung-uk Kim 475*eef1b955SJung-uk Kim 476*eef1b955SJung-uk Kim /******************************************************************************* 477*eef1b955SJung-uk Kim * 478*eef1b955SJung-uk Kim * FUNCTION: AslDoCommentType2 479*eef1b955SJung-uk Kim * 480*eef1b955SJung-uk Kim * PARAMETERS: none 481*eef1b955SJung-uk Kim * 482*eef1b955SJung-uk Kim * RETURN: none 483*eef1b955SJung-uk Kim * 484*eef1b955SJung-uk Kim * DESCRIPTION: Process a new "//" comment. 485*eef1b955SJung-uk Kim * 486*eef1b955SJung-uk Kim ******************************************************************************/ 487*eef1b955SJung-uk Kim 488*eef1b955SJung-uk Kim static char 489*eef1b955SJung-uk Kim AslDoCommentType2 ( 490*eef1b955SJung-uk Kim void) 491*eef1b955SJung-uk Kim { 492*eef1b955SJung-uk Kim char c; 493*eef1b955SJung-uk Kim 494*eef1b955SJung-uk Kim 495*eef1b955SJung-uk Kim AslInsertLineBuffer ('/'); 496*eef1b955SJung-uk Kim AslInsertLineBuffer ('/'); 497*eef1b955SJung-uk Kim 498*eef1b955SJung-uk Kim while ((c = (char) input()) != '\n' && c != EOF) 499*eef1b955SJung-uk Kim { 500*eef1b955SJung-uk Kim AslInsertLineBuffer (c); 501*eef1b955SJung-uk Kim } 502*eef1b955SJung-uk Kim 503*eef1b955SJung-uk Kim if (c == EOF) 504*eef1b955SJung-uk Kim { 505*eef1b955SJung-uk Kim /* End of file is OK, change to newline. Let parser detect EOF later */ 506*eef1b955SJung-uk Kim 507*eef1b955SJung-uk Kim c = '\n'; 508*eef1b955SJung-uk Kim } 509*eef1b955SJung-uk Kim 510*eef1b955SJung-uk Kim AslInsertLineBuffer (c); 511*eef1b955SJung-uk Kim return (TRUE); 512*eef1b955SJung-uk Kim } 513*eef1b955SJung-uk Kim 514*eef1b955SJung-uk Kim 515*eef1b955SJung-uk Kim /******************************************************************************* 516*eef1b955SJung-uk Kim * 517*eef1b955SJung-uk Kim * FUNCTION: AslDoStringLiteral 518*eef1b955SJung-uk Kim * 519*eef1b955SJung-uk Kim * PARAMETERS: none 520*eef1b955SJung-uk Kim * 521*eef1b955SJung-uk Kim * RETURN: none 522*eef1b955SJung-uk Kim * 523*eef1b955SJung-uk Kim * DESCRIPTION: Process a string literal (surrounded by quotes) 524*eef1b955SJung-uk Kim * 525*eef1b955SJung-uk Kim ******************************************************************************/ 526*eef1b955SJung-uk Kim 527*eef1b955SJung-uk Kim static char 528*eef1b955SJung-uk Kim AslDoStringLiteral ( 529*eef1b955SJung-uk Kim void) 530*eef1b955SJung-uk Kim { 531*eef1b955SJung-uk Kim char *StringBuffer = MsgBuffer; 532*eef1b955SJung-uk Kim char *EndBuffer = MsgBuffer + ASL_MSG_BUFFER_SIZE; 533*eef1b955SJung-uk Kim char *CleanString; 534*eef1b955SJung-uk Kim char StringChar; 535*eef1b955SJung-uk Kim UINT32 State = ASL_NORMAL_CHAR; 536*eef1b955SJung-uk Kim UINT32 i = 0; 537*eef1b955SJung-uk Kim UINT8 Digit; 538*eef1b955SJung-uk Kim char ConvertBuffer[4]; 539*eef1b955SJung-uk Kim 540*eef1b955SJung-uk Kim 541*eef1b955SJung-uk Kim /* 542*eef1b955SJung-uk Kim * Eat chars until end-of-literal. 543*eef1b955SJung-uk Kim * NOTE: Put back the original surrounding quotes into the 544*eef1b955SJung-uk Kim * source line buffer. 545*eef1b955SJung-uk Kim */ 546*eef1b955SJung-uk Kim AslInsertLineBuffer ('\"'); 547*eef1b955SJung-uk Kim while ((StringChar = (char) input()) != EOF) 548*eef1b955SJung-uk Kim { 549*eef1b955SJung-uk Kim AslInsertLineBuffer (StringChar); 550*eef1b955SJung-uk Kim 551*eef1b955SJung-uk Kim DoCharacter: 552*eef1b955SJung-uk Kim 553*eef1b955SJung-uk Kim switch (State) 554*eef1b955SJung-uk Kim { 555*eef1b955SJung-uk Kim case ASL_NORMAL_CHAR: 556*eef1b955SJung-uk Kim 557*eef1b955SJung-uk Kim switch (StringChar) 558*eef1b955SJung-uk Kim { 559*eef1b955SJung-uk Kim case '\\': 560*eef1b955SJung-uk Kim /* 561*eef1b955SJung-uk Kim * Special handling for backslash-escape sequence. We will 562*eef1b955SJung-uk Kim * toss the backslash and translate the escape char(s). 563*eef1b955SJung-uk Kim */ 564*eef1b955SJung-uk Kim State = ASL_ESCAPE_SEQUENCE; 565*eef1b955SJung-uk Kim continue; 566*eef1b955SJung-uk Kim 567*eef1b955SJung-uk Kim case '\"': 568*eef1b955SJung-uk Kim 569*eef1b955SJung-uk Kim /* String terminator */ 570*eef1b955SJung-uk Kim 571*eef1b955SJung-uk Kim goto CompletedString; 572*eef1b955SJung-uk Kim } 573*eef1b955SJung-uk Kim break; 574*eef1b955SJung-uk Kim 575*eef1b955SJung-uk Kim 576*eef1b955SJung-uk Kim case ASL_ESCAPE_SEQUENCE: 577*eef1b955SJung-uk Kim 578*eef1b955SJung-uk Kim State = ASL_NORMAL_CHAR; 579*eef1b955SJung-uk Kim switch (StringChar) 580*eef1b955SJung-uk Kim { 581*eef1b955SJung-uk Kim case 'a': 582*eef1b955SJung-uk Kim StringChar = 0x07; /* BELL */ 583*eef1b955SJung-uk Kim break; 584*eef1b955SJung-uk Kim 585*eef1b955SJung-uk Kim case 'b': 586*eef1b955SJung-uk Kim StringChar = 0x08; /* BACKSPACE */ 587*eef1b955SJung-uk Kim break; 588*eef1b955SJung-uk Kim 589*eef1b955SJung-uk Kim case 'f': 590*eef1b955SJung-uk Kim StringChar = 0x0C; /* FORMFEED */ 591*eef1b955SJung-uk Kim break; 592*eef1b955SJung-uk Kim 593*eef1b955SJung-uk Kim case 'n': 594*eef1b955SJung-uk Kim StringChar = 0x0A; /* LINEFEED */ 595*eef1b955SJung-uk Kim break; 596*eef1b955SJung-uk Kim 597*eef1b955SJung-uk Kim case 'r': 598*eef1b955SJung-uk Kim StringChar = 0x0D; /* CARRIAGE RETURN*/ 599*eef1b955SJung-uk Kim break; 600*eef1b955SJung-uk Kim 601*eef1b955SJung-uk Kim case 't': 602*eef1b955SJung-uk Kim StringChar = 0x09; /* HORIZONTAL TAB */ 603*eef1b955SJung-uk Kim break; 604*eef1b955SJung-uk Kim 605*eef1b955SJung-uk Kim case 'v': 606*eef1b955SJung-uk Kim StringChar = 0x0B; /* VERTICAL TAB */ 607*eef1b955SJung-uk Kim break; 608*eef1b955SJung-uk Kim 609*eef1b955SJung-uk Kim case 'x': 610*eef1b955SJung-uk Kim State = ASL_HEX_CONSTANT; 611*eef1b955SJung-uk Kim i = 0; 612*eef1b955SJung-uk Kim continue; 613*eef1b955SJung-uk Kim 614*eef1b955SJung-uk Kim case '\'': /* Single Quote */ 615*eef1b955SJung-uk Kim case '\"': /* Double Quote */ 616*eef1b955SJung-uk Kim case '\\': /* Backslash */ 617*eef1b955SJung-uk Kim break; 618*eef1b955SJung-uk Kim 619*eef1b955SJung-uk Kim default: 620*eef1b955SJung-uk Kim 621*eef1b955SJung-uk Kim /* Check for an octal digit (0-7) */ 622*eef1b955SJung-uk Kim 623*eef1b955SJung-uk Kim if (ACPI_IS_OCTAL_DIGIT (StringChar)) 624*eef1b955SJung-uk Kim { 625*eef1b955SJung-uk Kim State = ASL_OCTAL_CONSTANT; 626*eef1b955SJung-uk Kim ConvertBuffer[0] = StringChar; 627*eef1b955SJung-uk Kim i = 1; 628*eef1b955SJung-uk Kim continue; 629*eef1b955SJung-uk Kim } 630*eef1b955SJung-uk Kim 631*eef1b955SJung-uk Kim /* Unknown escape sequence issue warning, but use the character */ 632*eef1b955SJung-uk Kim 633*eef1b955SJung-uk Kim AslCommonError (ASL_WARNING, ASL_MSG_INVALID_ESCAPE, 634*eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 635*eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 636*eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 637*eef1b955SJung-uk Kim break; 638*eef1b955SJung-uk Kim } 639*eef1b955SJung-uk Kim break; 640*eef1b955SJung-uk Kim 641*eef1b955SJung-uk Kim 642*eef1b955SJung-uk Kim case ASL_OCTAL_CONSTANT: 643*eef1b955SJung-uk Kim 644*eef1b955SJung-uk Kim /* Up to three octal digits allowed */ 645*eef1b955SJung-uk Kim 646*eef1b955SJung-uk Kim if (!ACPI_IS_OCTAL_DIGIT (StringChar) || 647*eef1b955SJung-uk Kim (i > 2)) 648*eef1b955SJung-uk Kim { 649*eef1b955SJung-uk Kim /* 650*eef1b955SJung-uk Kim * Reached end of the constant. Convert the assembled ASCII 651*eef1b955SJung-uk Kim * string and resume processing of the next character 652*eef1b955SJung-uk Kim */ 653*eef1b955SJung-uk Kim ConvertBuffer[i] = 0; 654*eef1b955SJung-uk Kim Digit = (UINT8) ACPI_STRTOUL (ConvertBuffer, NULL, 8); 655*eef1b955SJung-uk Kim 656*eef1b955SJung-uk Kim /* Check for NULL or non-ascii character (ignore if so) */ 657*eef1b955SJung-uk Kim 658*eef1b955SJung-uk Kim if ((Digit == 0) || (Digit > ACPI_ASCII_MAX)) 659*eef1b955SJung-uk Kim { 660*eef1b955SJung-uk Kim AslCommonError (ASL_WARNING, ASL_MSG_INVALID_STRING, 661*eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 662*eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 663*eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 664*eef1b955SJung-uk Kim } 665*eef1b955SJung-uk Kim else 666*eef1b955SJung-uk Kim { 667*eef1b955SJung-uk Kim *StringBuffer = (char) Digit; 668*eef1b955SJung-uk Kim StringBuffer++; 669*eef1b955SJung-uk Kim if (StringBuffer >= EndBuffer) 670*eef1b955SJung-uk Kim { 671*eef1b955SJung-uk Kim goto BufferOverflow; 672*eef1b955SJung-uk Kim } 673*eef1b955SJung-uk Kim } 674*eef1b955SJung-uk Kim 675*eef1b955SJung-uk Kim State = ASL_NORMAL_CHAR; 676*eef1b955SJung-uk Kim goto DoCharacter; 677*eef1b955SJung-uk Kim break; 678*eef1b955SJung-uk Kim } 679*eef1b955SJung-uk Kim 680*eef1b955SJung-uk Kim /* Append another digit of the constant */ 681*eef1b955SJung-uk Kim 682*eef1b955SJung-uk Kim ConvertBuffer[i] = StringChar; 683*eef1b955SJung-uk Kim i++; 684*eef1b955SJung-uk Kim continue; 685*eef1b955SJung-uk Kim 686*eef1b955SJung-uk Kim 687*eef1b955SJung-uk Kim case ASL_HEX_CONSTANT: 688*eef1b955SJung-uk Kim 689*eef1b955SJung-uk Kim /* Up to two hex digits allowed */ 690*eef1b955SJung-uk Kim 691*eef1b955SJung-uk Kim if (!ACPI_IS_XDIGIT (StringChar) || 692*eef1b955SJung-uk Kim (i > 1)) 693*eef1b955SJung-uk Kim { 694*eef1b955SJung-uk Kim /* 695*eef1b955SJung-uk Kim * Reached end of the constant. Convert the assembled ASCII 696*eef1b955SJung-uk Kim * string and resume processing of the next character 697*eef1b955SJung-uk Kim */ 698*eef1b955SJung-uk Kim ConvertBuffer[i] = 0; 699*eef1b955SJung-uk Kim Digit = (UINT8) ACPI_STRTOUL (ConvertBuffer, NULL, 16); 700*eef1b955SJung-uk Kim 701*eef1b955SJung-uk Kim /* Check for NULL or non-ascii character (ignore if so) */ 702*eef1b955SJung-uk Kim 703*eef1b955SJung-uk Kim if ((Digit == 0) || (Digit > ACPI_ASCII_MAX)) 704*eef1b955SJung-uk Kim { 705*eef1b955SJung-uk Kim AslCommonError (ASL_WARNING, ASL_MSG_INVALID_STRING, 706*eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 707*eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 708*eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 709*eef1b955SJung-uk Kim } 710*eef1b955SJung-uk Kim else 711*eef1b955SJung-uk Kim { 712*eef1b955SJung-uk Kim *StringBuffer = (char) Digit; 713*eef1b955SJung-uk Kim StringBuffer++; 714*eef1b955SJung-uk Kim if (StringBuffer >= EndBuffer) 715*eef1b955SJung-uk Kim { 716*eef1b955SJung-uk Kim goto BufferOverflow; 717*eef1b955SJung-uk Kim } 718*eef1b955SJung-uk Kim } 719*eef1b955SJung-uk Kim 720*eef1b955SJung-uk Kim State = ASL_NORMAL_CHAR; 721*eef1b955SJung-uk Kim goto DoCharacter; 722*eef1b955SJung-uk Kim break; 723*eef1b955SJung-uk Kim } 724*eef1b955SJung-uk Kim 725*eef1b955SJung-uk Kim /* Append another digit of the constant */ 726*eef1b955SJung-uk Kim 727*eef1b955SJung-uk Kim ConvertBuffer[i] = StringChar; 728*eef1b955SJung-uk Kim i++; 729*eef1b955SJung-uk Kim continue; 730*eef1b955SJung-uk Kim } 731*eef1b955SJung-uk Kim 732*eef1b955SJung-uk Kim /* Save the finished character */ 733*eef1b955SJung-uk Kim 734*eef1b955SJung-uk Kim *StringBuffer = StringChar; 735*eef1b955SJung-uk Kim StringBuffer++; 736*eef1b955SJung-uk Kim if (StringBuffer >= EndBuffer) 737*eef1b955SJung-uk Kim { 738*eef1b955SJung-uk Kim goto BufferOverflow; 739*eef1b955SJung-uk Kim } 740*eef1b955SJung-uk Kim } 741*eef1b955SJung-uk Kim 742*eef1b955SJung-uk Kim /* 743*eef1b955SJung-uk Kim * Premature End-Of-File 744*eef1b955SJung-uk Kim */ 745*eef1b955SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_EARLY_EOF, 746*eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 747*eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 748*eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 749*eef1b955SJung-uk Kim return (FALSE); 750*eef1b955SJung-uk Kim 751*eef1b955SJung-uk Kim 752*eef1b955SJung-uk Kim CompletedString: 753*eef1b955SJung-uk Kim /* 754*eef1b955SJung-uk Kim * Null terminate the input string and copy string to a new buffer 755*eef1b955SJung-uk Kim */ 756*eef1b955SJung-uk Kim *StringBuffer = 0; 757*eef1b955SJung-uk Kim 758*eef1b955SJung-uk Kim CleanString = UtGetStringBuffer (strlen (MsgBuffer) + 1); 759*eef1b955SJung-uk Kim if (!CleanString) 760*eef1b955SJung-uk Kim { 761*eef1b955SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION, 762*eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 763*eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 764*eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, NULL); 765*eef1b955SJung-uk Kim return (FALSE); 766*eef1b955SJung-uk Kim } 767*eef1b955SJung-uk Kim 768*eef1b955SJung-uk Kim ACPI_STRCPY (CleanString, MsgBuffer); 769*eef1b955SJung-uk Kim AslCompilerlval.s = CleanString; 770*eef1b955SJung-uk Kim return (TRUE); 771*eef1b955SJung-uk Kim 772*eef1b955SJung-uk Kim 773*eef1b955SJung-uk Kim BufferOverflow: 774*eef1b955SJung-uk Kim 775*eef1b955SJung-uk Kim /* Literal was too long */ 776*eef1b955SJung-uk Kim 777*eef1b955SJung-uk Kim AslCommonError (ASL_ERROR, ASL_MSG_STRING_LENGTH, 778*eef1b955SJung-uk Kim Gbl_CurrentLineNumber, Gbl_LogicalLineNumber, 779*eef1b955SJung-uk Kim Gbl_CurrentLineOffset, Gbl_CurrentColumn, 780*eef1b955SJung-uk Kim Gbl_Files[ASL_FILE_INPUT].Filename, "Max length 4096"); 781*eef1b955SJung-uk Kim return (FALSE); 782*eef1b955SJung-uk Kim } 783