Skip to content

Instantly share code, notes, and snippets.

View Interfere's full-sized avatar
:octocat:
Focus time

Alexey Ushakov Interfere

:octocat:
Focus time
  • Delivery Hero
  • Berlin
View GitHub Profile
private final var _header: _VectorHeader {
unsafeAddress {
return Buffer(unsafeBufferObject: self).withUnsafeMutablePointerToValue { UnsafePointer($0) }
}
unsafeMutableAddress {
return Buffer(unsafeBufferObject: self).withUnsafeMutablePointerToValue { $0 }
}
}
struct MatrixIndex: Comparable, CustomStringConvertible {
let row: Int
let col: Int
var description: String {
return "(\(row), \(col))"
}
}
func ==(lhs: MatrixIndex, rhs: MatrixIndex) -> Bool {
encodeMessage (Request idx begin length) = runPut $ do
putWord32be (13 :: Word32)
putWord8 (6 :: Word8)
putWord32be (fromIntegral idx)
putWord32be (fromIntegral begin)
putWord32be (fromIntegral length)
@Interfere
Interfere / lexer_1.cpp
Created March 20, 2017 06:39
Lexer::lex routine
void lex(Token &Result) {
Result = NextToken;
if (Result.isNot(tok::eof))
lexImpl();
}
@Interfere
Interfere / lexer_2.cpp
Created March 20, 2017 06:47
Lexer prologue
Restart:
// Remember the start of the token so we can form the text range.
const char *TokStart = CurPtr;
switch ((signed char)*CurPtr++) {
...
}
@Interfere
Interfere / Token.h
Created March 20, 2017 06:49
Token declaration
enum class tok {
unknown = 0,
eof,
identifier,
oper_binary_unspaced, // "x+y"
oper_binary_spaced, // "x + y"
oper_postfix,
oper_prefix,
...
NUM_TOKENS
@Interfere
Interfere / lexer_3.cpp
Created March 20, 2017 06:51
Lexer formToken routine
void Lexer::formToken(tok Kind, const char *TokStart) {
assert(CurPtr >= BufferStart &&
CurPtr <= BufferEnd &&
"Current pointer out of range!");
NextToken.setToken(Kind, StringRef(TokStart, CurPtr-TokStart));
}
@Interfere
Interfere / lexer_4.cpp
Created March 22, 2017 08:38
Lexer consumes all whitespaces
case '\n':
case '\r':
NextToken.setAtStartOfLine(true);
goto Restart; // Skip whitespace.
case ' ':
case '\t':
case '\f':
case '\v':
goto Restart; // Skip whitespace.
@Interfere
Interfere / lexer_5.cpp
Created March 22, 2017 08:39
End of file
case 0:
// If this is a random nul character in the middle
// of a buffer, skip it as whitespace.
if (CurPtr-1 != BufferEnd) {
diagnoseEmbeddedNul(Diags, CurPtr-1);
goto Restart;
}
// Otherwise, this is the real end of the buffer.
// Put CurPtr back into buffer bounds.
CurPtr--;
@Interfere
Interfere / lexer_6.cpp
Created March 22, 2017 08:40
Brackets, colons, etc.
case '@': return formToken(tok::at_sign, TokStart);
case '{': return formToken(tok::l_brace, TokStart);
case '[': return formToken(tok::l_square, TokStart);
case '(': return formToken(tok::l_paren, TokStart);
case '}': return formToken(tok::r_brace, TokStart);
case ']': return formToken(tok::r_square, TokStart);
case ')': return formToken(tok::r_paren, TokStart);
case ',': return formToken(tok::comma, TokStart);
case ';': return formToken(tok::semi, TokStart);
case ':': return formToken(tok::colon, TokStart);