summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/bytecode/ExpressionRangeInfo.h
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2013-09-13 12:51:20 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-19 20:50:05 +0200
commitd441d6f39bb846989d95bcf5caf387b42414718d (patch)
treee367e64a75991c554930278175d403c072de6bb8 /Source/JavaScriptCore/bytecode/ExpressionRangeInfo.h
parent0060b2994c07842f4c59de64b5e3e430525c4b90 (diff)
downloadqtwebkit-d441d6f39bb846989d95bcf5caf387b42414718d.tar.gz
Import Qt5x2 branch of QtWebkit for Qt 5.2
Importing a new snapshot of webkit. Change-Id: I2d01ad12cdc8af8cb015387641120a9d7ea5f10c Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Source/JavaScriptCore/bytecode/ExpressionRangeInfo.h')
-rw-r--r--Source/JavaScriptCore/bytecode/ExpressionRangeInfo.h71
1 files changed, 68 insertions, 3 deletions
diff --git a/Source/JavaScriptCore/bytecode/ExpressionRangeInfo.h b/Source/JavaScriptCore/bytecode/ExpressionRangeInfo.h
index f4949a686..855738aec 100644
--- a/Source/JavaScriptCore/bytecode/ExpressionRangeInfo.h
+++ b/Source/JavaScriptCore/bytecode/ExpressionRangeInfo.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 Apple Inc. All rights reserved.
+ * Copyright (C) 2012, 2013 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -31,14 +31,79 @@
namespace JSC {
struct ExpressionRangeInfo {
+ // Line and column values are encoded in 1 of 3 modes depending on the size
+ // of their values. These modes are:
+ //
+ // 1. FatLine: 22-bit line, 8-bit column.
+ // 2. FatColumn: 8-bit line, 22-bit column.
+ // 3. FatLineAndColumn: 32-bit line, 32-bit column.
+ //
+ // For the first 2 modes, the line and column will be encoded in the 30-bit
+ // position field in the ExpressionRangeInfo. For the FatLineAndColumn mode,
+ // the position field will hold an index into a FatPosition vector which
+ // holds the FatPosition records with the full 32-bit line and column values.
+
+ enum {
+ FatLineMode,
+ FatColumnMode,
+ FatLineAndColumnMode
+ };
+
+ struct FatPosition {
+ uint32_t line;
+ uint32_t column;
+ };
+
+ enum {
+ FatLineModeLineShift = 8,
+ FatLineModeLineMask = (1 << 22) - 1,
+ FatLineModeColumnMask = (1 << 8) - 1,
+ FatColumnModeLineShift = 22,
+ FatColumnModeLineMask = (1 << 8) - 1,
+ FatColumnModeColumnMask = (1 << 22) - 1
+ };
+
enum {
MaxOffset = (1 << 7) - 1,
- MaxDivot = (1 << 25) - 1
+ MaxDivot = (1 << 25) - 1,
+ MaxFatLineModeLine = (1 << 22) - 1,
+ MaxFatLineModeColumn = (1 << 8) - 1,
+ MaxFatColumnModeLine = (1 << 8) - 1,
+ MaxFatColumnModeColumn = (1 << 22) - 1
};
+
+ void encodeFatLineMode(unsigned line, unsigned column)
+ {
+ ASSERT(line <= MaxFatLineModeLine);
+ ASSERT(column <= MaxFatLineModeColumn);
+ position = ((line & FatLineModeLineMask) << FatLineModeLineShift | (column & FatLineModeColumnMask));
+ }
+
+ void encodeFatColumnMode(unsigned line, unsigned column)
+ {
+ ASSERT(line <= MaxFatColumnModeLine);
+ ASSERT(column <= MaxFatColumnModeColumn);
+ position = ((line & FatColumnModeLineMask) << FatColumnModeLineShift | (column & FatColumnModeColumnMask));
+ }
+
+ void decodeFatLineMode(unsigned& line, unsigned& column)
+ {
+ line = (position >> FatLineModeLineShift) & FatLineModeLineMask;
+ column = position & FatLineModeColumnMask;
+ }
+
+ void decodeFatColumnMode(unsigned& line, unsigned& column)
+ {
+ line = (position >> FatColumnModeLineShift) & FatColumnModeLineMask;
+ column = position & FatColumnModeColumnMask;
+ }
+
uint32_t instructionOffset : 25;
- uint32_t divotPoint : 25;
uint32_t startOffset : 7;
+ uint32_t divotPoint : 25;
uint32_t endOffset : 7;
+ uint32_t mode : 2;
+ uint32_t position : 30;
};
} // namespace JSC